"""
@name:Turn_based_game
@author:siyuxiang
@projectname:siyuxiang
@data: 2022/7/7
"""
"""回合制对战游戏
创建角色：名字、性别、血量（默认100）、装备
    战斗：被攻击血量-10；有防弹衣时血量-5；血量小于等于0时战斗结束
    装备：防弹衣
创建房间：房间名，位置2个
    角色可加入房间
    房间内的角色可以战斗
    房间上限两人
    战斗信息：角色信息、胜利者
"""

class Role(object):
    def __init__(self, name, sex, blood=100, equipment=None):
        self.name = name
        self.sex = sex
        # 默认角色初始血量100点，无装备，无房间号
        self.blood = blood
        self.equipment = equipment
        self.room = None

    def attack(self, rival):
        # 同一房间才可进入战斗
        if self.room == rival.room:
            # 不能与自己进行战斗
            if self != rival:
                # 任意角色血量小于等于0时结束战斗
                if self.blood > 0 and rival.blood > 0:
                    # 对手有防弹衣时对其造成5点伤害，没有则为10点,并显示本次攻击信息
                    if rival.equipment is not None:
                        damage = 5
                        print(f"{self.name}对{rival.name}进行攻击，造成{damage}点伤害\n"
                              f"{self.name}当前血量：{self.blood}\t"
                              f"{rival.name}当前血量：{rival.blood-damage}")
                        rival.blood -= damage
                    else:
                        damage = 10
                        print(f"{self.name}对{rival.name}进行攻击，造成{damage}点伤害\n"
                              f"{self.name}当前血量：{self.blood}\t"
                              f"{rival.name}当前血量：{rival.blood - damage}")
                        rival.blood -= damage
                else:
                    print("检测到已有角色阵亡，开始结算")
                    if self.blood > 0:
                        print(f"{self.name}获胜")
                    else:
                        print(f"{rival.name}获胜")
                    exit()
            else:
                print("你无法攻击自己")
        else:
            print("选择的对手与当前角色不同房间")

class Room(object):
    def __init__(self, num):
        # 初始化 房间内成员空列表，房间号
        self.member = []
        self.num = num

    def join(self, role):
        # 有房间的角色无法再次加入
        if role.room is None:
            # 房间有空位才能加入
            if len(self.member) < 2:
                self.member.append(role)
                # 加入房间后修改role的room属性为房间号
                role.room = self.num
            else:
                print("该房间已满")
        else:
            print("该角色已加入房间")

role_dict = {}
room_dict = {}

while True:
    print("请根据选择进行操作：1.创建角色\t2.创建房间\t3.加入房间\t4.开始战斗\t5.退出")
    enter_number = input("请输入你的选择\t")
    # 确认输入类型为数字
    if enter_number.isdigit():
        enter_number = int(enter_number)
        # 确认输入的是1~5
        if 1 <= enter_number <= 5:
            # 1~5各选项分支
            if enter_number == 1:
                # 自定义role的ame, sex, blood, equipment属性,部分信息存入角色字典
                name, sex = input("请输入创建角色的姓名与性别，空格隔开：\n").split()
                role_dict[name] = Role(name, sex)
                def_blood = input("请自定义血量（整数）：")
                if def_blood.isdigit():
                    role_dict[name].blood = int(def_blood)
                    print(f"自定义血量成功\n"
                          f"角色{name}当前血量{role_dict[name].blood}")
                else:
                    print(f"自定义血量失败，使用默认血量100\n"
                          f"角色{name}当前血量{role_dict[name].blood}")
                wear_body_armor = input("是否穿防弹衣(y/n)\n")
                if wear_body_armor == "y":
                    role_dict[name].equipment = 1
            elif enter_number == 2:
                # 自定义Room类的num属性，存入room_dict
                def_num = input("请输入房间号：\n")
                room_dict[def_num] = Room(def_num)
            elif enter_number == 3:
                # 指定角色加入指定房间
                print(f"当前角色一览：{role_dict.keys()}\n当前房间一览：{room_dict.keys()}")
                join_role_name, join_room_num = input("请输入选择的角色名及加入的房间号，空格隔开\n").split()
                if join_role_name in role_dict.keys() and join_room_num in room_dict.keys():
                    # 调用Room的join方法
                    room_dict[join_room_num].join(role_dict[join_role_name])
                else:
                    print("未查询到输入的角色/房间信息")
            elif enter_number == 4:
                print(f"当前房间有：\n{room_dict.keys()}")
                room_num = input("请输入要进入的房间号：")
                # 房间有两人才能开始战斗
                if len(room_dict[room_num].member) == 2:
                    while True:
                        room_dict[room_num].member[0].attack(room_dict[room_num].member[1])
                        room_dict[room_num].member[1].attack(room_dict[room_num].member[0])
                else:
                    print(f"{room_num}号房间不足两人，请继续添加角色")
                    continue
            elif enter_number == 5:
                print("已退出")
                break
        else:
            print("请输入准确数字（1~5）")
    else:
        print("请输入数字")

